home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-19 / iritsm3s.zip / DINNER.IRT < prev    next >
Text File  |  1991-11-17  |  10KB  |  293 lines

  1. #
  2. # A dinner table scene, to demonstrate the surface constructors of the IRIT
  3. # solid modeller. Do not attempt to run this model on an IBM PC...
  4. #
  5. #                    Gershon Elber, June 1991
  6. #
  7. # modification to dinner.ray:
  8. # fov 12
  9. # light 1 1 1 point 10 30 10
  10.  
  11. resolution = 10;
  12. if ( machine, "=", msdos, (resolution = 5));
  13.  
  14. #
  15. # First model the floor...
  16. #
  17. v1 = vector( -4.0, -4.0, 0.0 );
  18. v2 = vector(  4.0, -4.0, 0.0 );
  19. v3 = vector(  4.0,  4.0, 0.0 );
  20. v4 = vector( -4.0,  4.0, 0.0 );
  21. floor = poly( list( v1, v2, v3, v4 ) );
  22. color( floor, white );
  23. attrib( floor, "texture", "marble" );
  24. attrib( floor, "reflect", "0.6" );
  25. attrib( floor, "rgb", "100,0,0" );
  26.  
  27. #
  28. # Model the table:
  29. #
  30.  
  31. cross = ctlpt( E3, 0.0001, 0.0, 1.0 ) +
  32.         ctlpt( E3, 1.0,    0.0, 1.0 ) +
  33.         ctlpt( E3, 1.0,    0.0, 0.95 ) +
  34.     cbspline( 3,
  35.           list( ctlpt( E3, 0.1, 0.0, 0.95 ),
  36.             ctlpt( E3, 0.1, 0.0, 0.9 ),
  37.             ctlpt( E3, 0.1, 0.0, 0.7 ),
  38.             ctlpt( E3, 0.2, 0.0, 0.6 ),
  39.             ctlpt( E3, 0.2, 0.0, 0.2 ),
  40.             ctlpt( E3, 0.4, 0.0, 0.05 ),
  41.             ctlpt( E3, 0.4, 0.0, 0.0 ) ),
  42.           list( KV_OPEN ) ) +
  43.     ctlpt( E3, 0.0001, 0.0, 0.0 );
  44. table = surfrev( cross );
  45. color( table, yellow );
  46. attrib( table, "resolution", "2" );
  47. attrib( table, "texture", "wood" );
  48. attrib( table, "reflect", "0.6" );
  49. attrib( table, "rgb", "244,164,96" );
  50.  
  51. #
  52. # Make the two chairs.
  53. #
  54. base1 = sweepsrf( circle( vector( 0.0, 0.0, 0.0 ), 0.02 ),
  55.           cbspline( 3,
  56.                 list( ctlpt( E3, 0.5,   0.2, 0.5 ),
  57.                   ctlpt( E3, 0.5,   0.2, 0.07 ),
  58.                   ctlpt( E3, 0.5,   0.2, 0.015 ),
  59.                   ctlpt( E3, 0.43,  0.2, 0.015 ),
  60.                   ctlpt( E3, 0.25,  0.2, 0.1 ),
  61.                   ctlpt( E3, 0.07,  0.2, 0.015 ),
  62.                   ctlpt( E3, 0.0,   0.2, 0.015 ),
  63.                   ctlpt( E3, 0.0,   0.2, 0.07 ),
  64.                   ctlpt( E3, 0.0,   0.2, 0.5 ) ),
  65.                 list( KV_OPEN ) ),
  66.           1.0 );
  67. color( base1, white );
  68. attrib( base1, "reflect", "0.9" );
  69. base2 = base1 * trans( vector( 0.0, -0.4, 0.0 ) );
  70.  
  71. swpcrv = cbspline( 3,
  72.            list( ctlpt( E3,  0.6, 0.0, 0.5 ),
  73.              ctlpt( E3,  0.3, 0.0, 0.6 ),
  74.              ctlpt( E3,  0.0, 0.0, 0.5 ),
  75.              ctlpt( E3, -0.1, 0.0, 0.5 ),
  76.              ctlpt( E3, -0.1, 0.0, 0.6 ),
  77.              ctlpt( E3,  0.0, 0.0, 0.9 ),
  78.              ctlpt( E3, -0.1, 0.0, 1.2 ) ),
  79.            list( KV_OPEN ) );
  80. swpcrv = crefine( swpcrv, false, list( 0.01, 0.1, 0.2, 0.3, 4.7, 4.8, 4.9, 4.99 ) );
  81.  
  82. cross = arc( vector(  0.25,  0.05,  0.0 ),
  83.          vector(  0.25,  0.0,   0.0 ),
  84.          vector(  0.3,   0.0,   0.0 ) ) +
  85.     arc( vector(  0.3,   0.0,   0.0 ),
  86.          vector(  0.25,  0.0,   0.0 ),
  87.          vector(  0.25, -0.05,  0.0 ) ) +
  88.     arc( vector( -0.25, -0.05,  0.0 ),
  89.          vector( -0.25,  0.0,   0.0 ),
  90.          vector( -0.3,   0.0,   0.0 ) ) +
  91.     arc( vector( -0.3,   0.0,   0.0 ),
  92.          vector( -0.25,  0.0,   0.0 ),
  93.          vector( -0.25,  0.05,  0.0 ) ) +
  94.     ctlpt( E3, 0.25, 0.05, 0.0 );
  95.  
  96. coverMain = sweepsrf( cross, swpcrv, 1.0 );
  97. color( coverMain, yellow );
  98. attrib( coverMain, "texture", "wood" );
  99. attrib( coverMain, "rgb", "244,164,96" );
  100.  
  101. c1 = cmesh(coverMain, ROW, 14);
  102. c2 = c1 * trans( vector( -0.018, 0.0, 0.06 ) );
  103. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  104.       trans( vector( -0.124, 0.0, 1.26 ) );
  105. coverTop = sFromCrvs( list( c1, c2, c3 ) );
  106. color( coverTop, yellow );
  107. attrib( coverTop, "texture", "wood" );
  108. attrib( coverTop, "rgb", "244,164,96" );
  109.  
  110. c1 = cmesh(coverMain, ROW, 0);
  111. c2 = c1 * trans( vector( 0.06, 0.0, -0.02 ) );
  112. c3 = c2 * scale( vector( 0.0, 0.83, 0.0 ) ) *
  113.       trans( vector( 0.66, 0.0, 0.48 ) );
  114. coverBot = sFromCrvs( list( c1, c2, c3 ) );
  115. color( coverBot, yellow );
  116. attrib( coverBot, "texture", "wood" );
  117. attrib( coverBot, "rgb", "244,164,96" );
  118.  
  119. cover = list( CoverMain, coverBot, CoverTop );
  120.  
  121. chair = list( cover, base1, base2 );
  122. chair1 = chair * trans( vector( -1.2, 0.0, 0.0 ) );
  123. chair2 = chair1 * rotz( 90 );
  124. chair3 = chair1 * rotz( 180 );
  125. chair4 = chair1 * rotz( 270 );
  126. chairs = list( chair1, chair2, chair3, chair4 );
  127.  
  128. #
  129. # Create some dishes/cups.
  130. #
  131.  
  132. # Four Dishes.
  133. cross = cbspline( 3,
  134.           list( ctlpt( E3, 0.0001, 0.0, 0.003 ),
  135.             ctlpt( E3, 0.1,    0.0, 0.003 ),
  136.             ctlpt( E3, 0.12,   0.0, 0.0 ),
  137.             ctlpt( E3, 0.15,   0.0, 0.03 ),
  138.             ctlpt( E3, 0.15,   0.0, 0.04 ),
  139.             ctlpt( E3, 0.14,   0.0, 0.03 ),
  140.             ctlpt( E3, 0.12,   0.0, 0.013 ),
  141.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  142.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  143.           list( KV_OPEN ) );
  144. dish = surfrev( cross );
  145. color( dish, white );
  146. attrib( dish, "reflect", "0.2" );
  147. dish1 = dish * trans( vector( 0.75, 0.0, 1.0 ) );
  148. dish2 = dish * trans( vector( -0.75, 0.0, 1.0 ) );
  149. dish3 = dish * trans( vector( 0.0, 0.75, 1.0 ) );
  150. dish4 = dish * trans( vector( 0.0, -0.75, 1.0 ) );
  151. dishes = list( dish1, dish2, dish3, dish4 );
  152.  
  153. # Wine glasses.
  154. cross = cbspline( 3,
  155.           list( ctlpt( E3, 0.0001, 0.0, 0.002 ),
  156.               ctlpt( E3, 0.02,   0.0, 0.002 ),
  157.             ctlpt( E3, 0.022,  0.0, 0.0 ),
  158.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  159.             ctlpt( E3, 0.003,  0.0, 0.003 ),
  160.             ctlpt( E3, 0.003,  0.0, 0.007 ),
  161.             ctlpt( E3, 0.004,  0.0, 0.03 ),
  162.             ctlpt( E3, 0.03,   0.0, 0.03 ),
  163.             ctlpt( E3, 0.04,   0.0, 0.04 ),
  164.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  165.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  166.             ctlpt( E3, 0.037,  0.0, 0.042 ),
  167.             ctlpt( E3, 0.031,  0.0, 0.032 ),
  168.             ctlpt( E3, 0.0001, 0.0, 0.032 ) ),
  169.         list( KV_OPEN ) );
  170. wglass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  171. color( wglass, white );
  172. attrib( wglass, "reflect", "0.2" );
  173. attrib( wglass, "transp", "0.95" );
  174. attrib( wglass, "index", "1.4" );
  175. wglass1 = wglass * trans( vector( 0.75, 0.2, 1.0 ) );
  176. wglass2 = wglass * trans( vector( -0.75, -0.2, 1.0 ) );
  177. wglass3 = wglass * trans( vector( -0.2, 0.75, 1.0 ) );
  178. wglass4 = wglass * trans( vector( 0.2, -0.75, 1.0 ) );
  179. wglasses = list( wglass1, wglass2, wglass3, wglass4 );
  180.  
  181. # Regular glasses.
  182. cross = cbspline( 3,
  183.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  184.               ctlpt( E3, 0.02,   0.0, 0.0 ),
  185.             ctlpt( E3, 0.022,  0.0, 0.001 ),
  186.             ctlpt( E3, 0.022,  0.0, 0.003 ),
  187.             ctlpt( E3, 0.03,   0.0, 0.07 ),
  188.             ctlpt( E3, 0.03,   0.0, 0.072 ),
  189.             ctlpt( E3, 0.028,  0.0, 0.072 ),
  190.             ctlpt( E3, 0.028,  0.0, 0.07 ),
  191.             ctlpt( E3, 0.02,   0.0, 0.005 ),
  192.             ctlpt( E3, 0.018,  0.0, 0.005 ),
  193.             ctlpt( E3, 0.0001, 0.0, 0.005 ) ),
  194.           list( KV_OPEN ) );
  195. glass = surfrev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  196. color( glass, white );
  197. attrib( glass, "reflect", "0.2" );
  198. attrib( glass, "transp", "0.95" );
  199. attrib( glass, "index", "1.4" );
  200. glass1 = glass * trans( vector( 0.75, -0.2, 1.0 ) );
  201. glass2 = glass * trans( vector( -0.75, 0.2, 1.0 ) );
  202. glass3 = glass * trans( vector( 0.2, 0.75, 1.0 ) );
  203. glass4 = glass * trans( vector( -0.2, -0.75, 1.0 ) );
  204. glasses = list( glass1, glass2, glass3, glass4 );
  205.  
  206. # Napkins.
  207. cross = cbspline( 3,
  208.           list( ctlpt( E2, -0.018, 0.001 ),
  209.               ctlpt( E2,  0.018, 0.001 ),
  210.             ctlpt( E2,  0.019, 0.002 ),
  211.             ctlpt( E2,  0.018, 0.004 ),
  212.             ctlpt( E2, -0.018, 0.004 ),
  213.             ctlpt( E2, -0.019, 0.001 ) ),
  214.           list( KV_OPEN ) );
  215. cross = cross + -cross * scale( vector( 1, -1, 1 ) );
  216.  
  217. napkin = extrude( cross * scale( vector( 1.6, 1.6, 1.6 ) ),
  218.           vector( 0.02, 0.03, 0.2 ) );
  219. color( napkin, red );
  220. napkin1 = napkin * trans( vector( 0.75, -0.2, 1.0 ) );
  221. napkin2 = napkin1 * rotz( 90 );
  222. napkin3 = napkin1 * rotz( 180 );
  223. napkin4 = napkin1 * rotz( 270 );
  224. napkins = list( napkin1, napkin2, napkin3, napkin4 );
  225.  
  226. # Big dish.
  227. cross = ctlpt( E3, 0.0001, 0.0, 0.003 ) +
  228.     cbspline( 3,
  229.           list(    ctlpt( E3, 0.15,   0.0, 0.003 ),
  230.             ctlpt( E3, 0.1,    0.0, 0.01 ),
  231.             ctlpt( E3, 0.1,    0.0, 0.035 ),
  232.             ctlpt( E3, 0.2,    0.0, 0.15 ),
  233.             ctlpt( E3, 0.195,  0.0, 0.15 ),
  234.             ctlpt( E3, 0.09,   0.0, 0.03 ),
  235.             ctlpt( E3, 0.04,   0.0, 0.01 ),
  236.             ctlpt( E3, 0.0001, 0.0, 0.01 ) ),
  237.           list( KV_OPEN ) );
  238. bigdish = surfrev( cross * scale( vector( 1.2, 1.2, 1.2 ) ) );
  239. bigdish = bigdish * trans( vector( 0.0, -0.2, 1.0 ) );
  240. color( bigdish, white );
  241. attrib( bigdish, "reflect", "0.2" );
  242. attrib( bigdish, "transp", "0.95" );
  243. attrib( bigdish, "index", "1.4" );
  244. alldishes = list( dishes, wglasses, glasses, napkins, bigdish );
  245.  
  246. #
  247. # Create some candles staff.
  248. #
  249. cross = cbspline( 3,
  250.           list( ctlpt( E3, 0.0001, 0.0, 0.0 ),
  251.             ctlpt( E3, 0.03,   0.0, 0.0 ),
  252.             ctlpt( E3, 0.035,   0.0, -0.001 ),
  253.             ctlpt( E3, 0.02,   0.0, 0.011 ),
  254.             ctlpt( E3, 0.015,  0.0, 0.011 ),
  255.             ctlpt( E3, 0.014,  0.0, 0.012 ),
  256.             ctlpt( E3, 0.014,  0.0, 0.02 ),
  257.             ctlpt( E3, 0.02,   0.0, 0.03 ) ),
  258.           list( KV_OPEN ) ) +
  259.     ctlpt( E3, 0.012,  0.0, 0.03 ) +
  260.     ctlpt( E3, 0.012,  0.0, 0.015 ) +
  261.     ctlpt( E3, 0.0001, 0.0, 0.015 );
  262.  
  263. cndlbase = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  264. color( cndlbase, white );
  265. attrib( cndlbase, "reflect", "0.2" );
  266. attrib( cndlbase, "transp", "0.95" );
  267. cndlbase1 = cndlbase * trans( vector( 0.2, 0.3, 1.0 ) );
  268. cndlbase2 = cndlbase * trans( vector( -0.2, 0.3, 1.0 ) );
  269.  
  270. cross = ctlpt( E3, 0.0001, 0.0, 0.015 ) +
  271.     cbspline( 3,
  272.           list(    ctlpt( E3, 0.011,  0.0, 0.015 ),
  273.             ctlpt( E3, 0.011,  0.0, 0.2 ),
  274.             ctlpt( E3, 0.003,  0.0, 0.3 ) ),
  275.           list( KV_OPEN ) );
  276. candle = surfrev( cross * scale( vector( 2, 2, 2 ) ) );
  277. color( candle, red );
  278. candle1 = candle * trans( vector( 0.2, 0.3, 1.0 ) );
  279. candle2 = candle * trans( vector( -0.2, 0.3, 1.0 ) );
  280.  
  281. candles = list( cndlbase1, cndlbase2, candle1, candle2 );
  282.  
  283. #
  284. # View it all and dump it.
  285. #
  286.  
  287. view_mat = view_mat * scale( vector( 0.5, 0.5, 0.5 ) );
  288. dinner = list( floor, table, chairs, alldishes, candles );
  289. interact( dinner, 0 );
  290. save( "dinner", list( view_mat, dinner ) );
  291.  
  292. exit();
  293.